package com.hnit.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hnit.utils.AuthRequest;
import com.hnit.utils.AuthResponse;
import com.hnit.web.DTO.UserDTO;
import com.hnit.web.Utils.ResponseResult;
import com.hnit.web.bean.User;

import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.Optional;

public interface UserService {
    ResponseResult insertUser(UserDTO userDTO);
    AuthResponse login(AuthRequest authRequest) throws NoSuchAlgorithmException;

    void logout(String token);
    Optional<UserDTO> getUserById(Long id);
    ResponseResult cheakUserName(String username);
    UserDTO updateUser(Long id, UserDTO userDTO);
    IPage<UserDTO> getAllUsers(int pageNum, int pageSize, String userName, String email, Integer userStatus);

    /**
     * 更新用户密码，需要验证旧密码
     * @param userId 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 更新后的用户DTO（密码已加密）
     * @throws IllegalArgumentException 如果旧密码不正确或用户不存在
     * @throws NoSuchAlgorithmException 如果密码加密失败
     */
    UserDTO updatePassword(Long userId, String oldPassword, String newPassword) throws IllegalArgumentException, NoSuchAlgorithmException;

    /**
     * 更新用户状态
     * @param userId 用户ID
     * @param status 新状态
     * @return 更新后的用户DTO
     * @throws IllegalArgumentException 如果用户不存在
     */
    ResponseResult updateUserStatus(Long userId, String status) throws IllegalArgumentException;

    //管理员获取总用户数，商品数，订单数，总营业额
    Map<String, Object> getAdminStatistics();
}
